1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package rx.internal.operators;
17
18 import static org.junit.Assert.*;
19 import static org.mockito.Mockito.*;
20
21 import java.util.Arrays;
22 import java.util.concurrent.TimeUnit;
23
24 import org.junit.Test;
25
26 import rx.*;
27 import rx.functions.Func1;
28 import rx.internal.util.UtilityFunctions;
29
30 public class OperatorAnyTest {
31
32 @Test
33 public void testAnyWithTwoItems() {
34 Observable<Integer> w = Observable.just(1, 2);
35 Observable<Boolean> observable = w.exists(UtilityFunctions.alwaysTrue());
36
37 @SuppressWarnings("unchecked")
38 Observer<Boolean> observer = mock(Observer.class);
39 observable.subscribe(observer);
40 verify(observer, never()).onNext(false);
41 verify(observer, times(1)).onNext(true);
42 verify(observer, never()).onError(org.mockito.Matchers.any(Throwable.class));
43 verify(observer, times(1)).onCompleted();
44 }
45
46 @Test
47 public void testIsEmptyWithTwoItems() {
48 Observable<Integer> w = Observable.just(1, 2);
49 Observable<Boolean> observable = w.isEmpty();
50
51 @SuppressWarnings("unchecked")
52 Observer<Boolean> observer = mock(Observer.class);
53 observable.subscribe(observer);
54 verify(observer, never()).onNext(true);
55 verify(observer, times(1)).onNext(false);
56 verify(observer, never()).onError(org.mockito.Matchers.any(Throwable.class));
57 verify(observer, times(1)).onCompleted();
58 }
59
60 @Test
61 public void testAnyWithOneItem() {
62 Observable<Integer> w = Observable.just(1);
63 Observable<Boolean> observable = w.exists(UtilityFunctions.alwaysTrue());
64
65 @SuppressWarnings("unchecked")
66 Observer<Boolean> observer = mock(Observer.class);
67 observable.subscribe(observer);
68 verify(observer, never()).onNext(false);
69 verify(observer, times(1)).onNext(true);
70 verify(observer, never()).onError(org.mockito.Matchers.any(Throwable.class));
71 verify(observer, times(1)).onCompleted();
72 }
73
74 @Test
75 public void testIsEmptyWithOneItem() {
76 Observable<Integer> w = Observable.just(1);
77 Observable<Boolean> observable = w.isEmpty();
78
79 @SuppressWarnings("unchecked")
80 Observer<Boolean> observer = mock(Observer.class);
81 observable.subscribe(observer);
82 verify(observer, never()).onNext(true);
83 verify(observer, times(1)).onNext(false);
84 verify(observer, never()).onError(org.mockito.Matchers.any(Throwable.class));
85 verify(observer, times(1)).onCompleted();
86 }
87
88 @Test
89 public void testAnyWithEmpty() {
90 Observable<Integer> w = Observable.empty();
91 Observable<Boolean> observable = w.exists(UtilityFunctions.alwaysTrue());
92
93 @SuppressWarnings("unchecked")
94 Observer<Boolean> observer = mock(Observer.class);
95 observable.subscribe(observer);
96 verify(observer, times(1)).onNext(false);
97 verify(observer, never()).onNext(true);
98 verify(observer, never()).onError(org.mockito.Matchers.any(Throwable.class));
99 verify(observer, times(1)).onCompleted();
100 }
101
102 @Test
103 public void testIsEmptyWithEmpty() {
104 Observable<Integer> w = Observable.empty();
105 Observable<Boolean> observable = w.isEmpty();
106
107 @SuppressWarnings("unchecked")
108 Observer<Boolean> observer = mock(Observer.class);
109 observable.subscribe(observer);
110 verify(observer, times(1)).onNext(true);
111 verify(observer, never()).onNext(false);
112 verify(observer, never()).onError(org.mockito.Matchers.any(Throwable.class));
113 verify(observer, times(1)).onCompleted();
114 }
115
116 @Test
117 public void testAnyWithPredicate1() {
118 Observable<Integer> w = Observable.just(1, 2, 3);
119 Observable<Boolean> observable = w.exists(
120 new Func1<Integer, Boolean>() {
121
122 @Override
123 public Boolean call(Integer t1) {
124 return t1 < 2;
125 }
126 });
127
128 @SuppressWarnings("unchecked")
129 Observer<Boolean> observer = mock(Observer.class);
130 observable.subscribe(observer);
131 verify(observer, never()).onNext(false);
132 verify(observer, times(1)).onNext(true);
133 verify(observer, never()).onError(org.mockito.Matchers.any(Throwable.class));
134 verify(observer, times(1)).onCompleted();
135 }
136
137 @Test
138 public void testExists1() {
139 Observable<Integer> w = Observable.just(1, 2, 3);
140 Observable<Boolean> observable = w.exists(
141 new Func1<Integer, Boolean>() {
142
143 @Override
144 public Boolean call(Integer t1) {
145 return t1 < 2;
146 }
147 });
148
149 @SuppressWarnings("unchecked")
150 Observer<Boolean> observer = mock(Observer.class);
151 observable.subscribe(observer);
152 verify(observer, never()).onNext(false);
153 verify(observer, times(1)).onNext(true);
154 verify(observer, never()).onError(org.mockito.Matchers.any(Throwable.class));
155 verify(observer, times(1)).onCompleted();
156 }
157
158 @Test
159 public void testAnyWithPredicate2() {
160 Observable<Integer> w = Observable.just(1, 2, 3);
161 Observable<Boolean> observable = w.exists(
162 new Func1<Integer, Boolean>() {
163
164 @Override
165 public Boolean call(Integer t1) {
166 return t1 < 1;
167 }
168 });
169
170 @SuppressWarnings("unchecked")
171 Observer<Boolean> observer = mock(Observer.class);
172 observable.subscribe(observer);
173 verify(observer, times(1)).onNext(false);
174 verify(observer, never()).onNext(true);
175 verify(observer, never()).onError(org.mockito.Matchers.any(Throwable.class));
176 verify(observer, times(1)).onCompleted();
177 }
178
179 @Test
180 public void testAnyWithEmptyAndPredicate() {
181
182 Observable<Integer> w = Observable.empty();
183 Observable<Boolean> observable = w.exists(
184 new Func1<Integer, Boolean>() {
185
186 @Override
187 public Boolean call(Integer t1) {
188 return true;
189 }
190 });
191
192 @SuppressWarnings("unchecked")
193 Observer<Boolean> observer = mock(Observer.class);
194 observable.subscribe(observer);
195 verify(observer, times(1)).onNext(false);
196 verify(observer, never()).onNext(true);
197 verify(observer, never()).onError(org.mockito.Matchers.any(Throwable.class));
198 verify(observer, times(1)).onCompleted();
199 }
200
201 @Test
202 public void testWithFollowingFirst() {
203 Observable<Integer> o = Observable.from(Arrays.asList(1, 3, 5, 6));
204 Observable<Boolean> anyEven = o.exists(new Func1<Integer, Boolean>() {
205 @Override
206 public Boolean call(Integer i) {
207 return i % 2 == 0;
208 }
209 });
210 assertTrue(anyEven.toBlocking().first());
211 }
212 @Test(timeout = 5000)
213 public void testIssue1935NoUnsubscribeDownstream() {
214 Observable<Integer> source = Observable.just(1).isEmpty()
215 .flatMap(new Func1<Boolean, Observable<Integer>>() {
216 @Override
217 public Observable<Integer> call(Boolean t1) {
218 return Observable.just(2).delay(500, TimeUnit.MILLISECONDS);
219 }
220 });
221 assertEquals((Object)2, source.toBlocking().first());
222 }
223 }